﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace RoleHelper
{
    public partial class EditNPC : Form
    {
        private int selec = 0;

        public EditNPC()
        {
            InitializeComponent();
        }

        private void salir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void EditNPC_Load(object sender, EventArgs e)
        {
            int j;
            List<Situacion> situs = Program.avent.getSituacion();
            j = situs.Count;
            System.Object[] Item = new System.Object[j];
            for (int i = 0; i < j; i++)
            {
                Item[i] = situs[i].getNombre();

            }
            comboSitus.Items.AddRange(Item);
            comboBoxSitus2.Items.AddRange(Item);
            this.refresh();
        }

        private void comboSitus_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.refresh();
            this.refresNPC();
            string nomSitu = comboSitus.Text;
            for (int i = listSitus.Items.Count - 1; i >= 0; i--)
            {
                if (nomSitu == listSitus.Items[i].Text)
                {
                    listSitus.Items.RemoveAt(i);
                    comboBoxSitus2.Items.RemoveAt(i);
                }
            }
        }

        private void añadir_Click(object sender, EventArgs e)
        {
            this.añadirproc(Program.avent.getSituacion(comboSitus.Text));
        }
        public void refresNPC()
        { 
            int j;
            Situacion situ = Program.avent.getSituacion(comboSitus.Text);
            List<NPC> npcs = situ.getNPC();
            listNPC.Items.Clear();
            j = npcs.Count;
            for (int i = 0; i < j; i++)
            {
                string[] toNPC = new string[8];
                toNPC[0] = Convert.ToString(npcs[i].getID());
                toNPC[1] = npcs[i].getNombre();
                toNPC[2] = Convert.ToString(npcs[i].getNivel());
                toNPC[3] = Convert.ToString(npcs[i].getVidaMax());
                toNPC[4] = Convert.ToString(npcs[i].getppMax());
                if (npcs[i].getMasked() == false)
                {
                    if (npcs[i].getSexo() == 'M')
                    {
                        toNPC[5] = "Macho";
                    }
                    else if (npcs[i].getSexo() == 'H')
                    {
                        toNPC[5] = "Hembra";
                    }
                }
                else
                {
                    toNPC[5] = "No se sabe";
                }
                if (npcs[i].getBomasked() == false)
                {
                    toNPC[6] = Convert.ToString(npcs[i].getBO());
                }
                else
                {
                    toNPC[6] = "No se sabe";
                }
                if (npcs[i].getBdmasjed() == false)
                {
                    toNPC[7] = Convert.ToString(npcs[i].getBD());
                }
                else
                {
                    toNPC[7] = "No se sabe";
                }
                ListViewItem lista = new ListViewItem(toNPC);
                listNPC.Items.Add(lista);
                Program.Principal.refreshbarra();
            }
        }

        public void refresh()
        {
            int j;
            List<Situacion> situs = Program.avent.getSituacion();
            j = situs.Count;
            listSitus.Items.Clear();
            comboBoxSitus2.Items.Clear(); 
            for (int i = 0; i < j; i++)
            {
                string[] textoSitus = new string[2];
                textoSitus[0] = situs[i].getNombre();
                textoSitus[1] = situs[i].getDesc();
                ListViewItem lista = new ListViewItem(textoSitus);
                listSitus.Items.Add(lista);
                comboBoxSitus2.Items.Add(textoSitus[0]);
            }
        }

        private void eliminar_Click(object sender, EventArgs e)
        {
            this.eliminarproc(Program.avent.getSituacion(comboSitus.Text));
            Program.Principal.refreshbarra();
        }

        private void Copiar_Click(object sender, EventArgs e)
        {
            int id = 0;
            string nombre="";
            int lvl=0;
            int vMax=0;
            int pMax=0;
            char sex='0';
            bool masked=false;
            int bo = 0;
            int bd = 0;
            for (int i = listNPC.SelectedIndices.Count - 1; i >= 0; i--)
            {
                id = Convert.ToInt32(listNPC.Items[listNPC.SelectedIndices[i]].Text);
                NPC viejo = Program.avent.getSituacion(comboSitus.Text).getNPC(id);
                nombre = viejo.getNombre();
                lvl = viejo.getNivel();
                vMax = viejo.getVidaMax();
                pMax = viejo.getppMax();
                sex = viejo.getSexo();
                masked = viejo.getMasked();
                bo = viejo.getBO();
                bd = viejo.getBD();
            }
            NPC copia = new NPC(nombre,lvl,vMax, pMax, sex, masked,bo,bd);
            Program.avent.getSituacion(comboBoxSitus2.Text).addNPC(copia);
        }

        private void eliminarproc(Situacion situ)
        {
            int selec;
            for (int i = listNPC.SelectedIndices.Count - 1; i >= 0; i--)
            {
                selec = listNPC.Items[listNPC.SelectedIndices[i]].Index;
                listNPC.Items.RemoveAt(selec);
                situ.deleteNPC(selec);
            }
        }

        private void añadirproc(Situacion situ)
        {
            char s = 'N';
            if (radioMacho.Checked == true)
            {
                s = 'M';
                NPC nuevo = new NPC(tnombre.Text, Convert.ToInt32(tlvl.Value), Convert.ToInt32(tvida.Value), Convert.ToInt32(tpp.Value), s, checkMaked.Checked, Convert.ToInt32(numericUpDownBO.Value),Convert.ToInt32(numericUpDownBD.Value));
                situ.addNPC(nuevo);
                tnombre.Text = "";
                tlvl.Value = tlvl.Minimum;
                tvida.Value = tvida.Minimum;
                tpp.Value = tpp.Minimum;
                checkMaked.Checked = false;
                radioHembra.Checked = false;
                radioMacho.Checked = false;
                tnombre.Focus();
            }
            else if (radioHembra.Checked == true)
            {
                s = 'H';
                NPC nuevo = new NPC(tnombre.Text, Convert.ToInt32(tlvl.Value), Convert.ToInt32(tvida.Value), Convert.ToInt32(tpp.Value), s, checkMaked.Checked, Convert.ToInt32(numericUpDownBO.Value), Convert.ToInt32(numericUpDownBD.Value));
                situ.addNPC(nuevo);
                tnombre.Text = "";
                tlvl.Value = tlvl.Minimum;
                tvida.Value = tvida.Minimum;
                tpp.Value = tpp.Minimum;
                checkMaked.Checked = false;
                radioHembra.Checked = false;
                radioMacho.Checked = false;
                tnombre.Focus();
            }
            this.refresNPC();
            Copiar.Enabled = true;
            Transferir.Enabled = true;
            comboBoxSitus2.Enabled = true;
        }

        private void Transferir_Click(object sender, EventArgs e)
        {
            int id = 0;
            string nombre = "";
            int lvl = 0;
            int vMax = 0;
            int pMax = 0;
            char sex = '0';
            bool masked = false;
            int bo = 0;
            int bd = 0;
            for (int i = listNPC.SelectedIndices.Count - 1; i >= 0; i--)
            {
                id = Convert.ToInt32(listNPC.Items[listNPC.SelectedIndices[i]].Text);
                NPC viejo = Program.avent.getSituacion(comboSitus.Text).getNPC(id);
                nombre = viejo.getNombre();
                lvl = viejo.getNivel();
                vMax = viejo.getVidaMax();
                pMax = viejo.getppMax();
                sex = viejo.getSexo();
                masked = viejo.getMasked();
                bo = viejo.getBO();
                bd = viejo.getBD();
            }
            NPC move = new NPC(nombre, lvl, vMax, pMax, sex, masked, bo,bd);
            Program.avent.getSituacion(comboBoxSitus2.Text).addNPC(move);
            this.eliminarproc(Program.avent.getSituacion(comboSitus.Text));
        }

        private void numericUpDown2_ValueChanged(object sender, EventArgs e)
        {

        }

        private void Guardarbutton_Click(object sender, EventArgs e)
        {
            for (int i = listNPC.SelectedIndices.Count - 1; i >= 0; i--)
            {
                NPC paguardar = Program.avent.getSituacion(comboSitus.Text).getNPC(selec);
                selec = listNPC.Items[listNPC.SelectedIndices[i]].Index;
                Guardardialog.FileName = paguardar.getNombre();
                Guardardialog.ShowDialog();
            }
        }

        private void Guardardialog_FileOk(object sender, CancelEventArgs e)
        {
            NPC paguardar = Program.avent.getSituacion(comboSitus.Text).getNPC(selec);
            if (paguardar.guardar(Guardardialog.FileName) == true)
            {
                MessageBox.Show("El NPC " + paguardar.getNombre() + " se ha guardado correctamente.", "Mensaje", MessageBoxButtons.OK);
            }
            else
            {
                MessageBox.Show("El NPC " + paguardar.getNombre() + " no se ha podido guardar correctamente.", "Error", MessageBoxButtons.OK);
            }
        }
    }
}
